package com.vgemv.jsutilitysdk.Menu.JsMenuView;


import android.content.Context;
import android.graphics.Rect;

import androidx.recyclerview.widget.RecyclerView;

import com.vgemv.jsutilitysdk.Menu.JsMenuView.JsMenuItemView.JsMenuItemView;
import com.vgemv.jsutilitysdk.Menu.JsMenuView.JsMenuItemVm.JsMenuItemVm;

import java.util.ArrayList;

//代理,回调,callback, 用来配合调用者对象的工作,
//协议,对于一类物体的封装,要实现的方法是要主动实现的.

public interface JsMenuViewBasicCallback {
    /**
     * 返回menuView对应的数据源.
     * @return
     */
    public ArrayList<JsMenuItemVm> jsMenuViewSetDatasource();

    /**
     * 点击当前item的事件,如果是点击了item的某个view,需要自定义Adpapter.
     * 事件在adapter中的好处是,adpater的onBindViewHolder中,提供了当前Vm的index.
     * @param menuView
     * @param i
     * @param vm
     */
    public void jsMenuViewClickItem(JsMenuView menuView, int i, JsMenuItemVm vm);


    /**
     * 返回每个item所对应的view.
     * @param menuView
     * @param context
     * @return
     */
    public JsMenuItemView jsMenuViewCreateItemView(JsMenuView menuView, Context context);


    /**
     * JsMenuFragment的view并不是在创建fragment的时候创建的,而是在之后的时机
     * 所以,在容器中,fragment的rootView可能是最后加上去的.
     * 如果view创建好后开始的操作,应该在这里进行.
     * @param menuView
     */
    public void jsMenuViewAfterCreateView(JsMenuView menuView);

    /**
     * 为JsMenuFragment设置Vm
     * 根据Vm进行配置和显示
     * @param menuView
     * @return
     */
    public JsMenuViewVm jsMenuViewSetVm(JsMenuView menuView);

    /**
     *
     * @param menuView  当前的fragment
     * @param index     当前itemView的序号.
     * @return
     */
    public Rect jsMenuViewSetItemOffset(JsMenuView menuView, int index);


    public JsMenuViewAdapter jsMenuViewSetAdapter(JsMenuView menuView);

    public void jsMenuItemViewWillDisplay(RecyclerView.ViewHolder viewHolder, final int position);

}